객체 함수의 prototype 프로퍼티

함수의 prototype 프로퍼티#

일반 객체에 prototype 프로퍼티를 사용하면 아무런 일이 일어나지 않는다.

let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
let rabbit = new Rabbit("White Rabbit"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true

image

Rabbit.prototype = animal

  • new Rabbit 을 호출해 만든 새로운 객체의 [[Prototype]]animal 로 설정하라

F.prototype 프로퍼티#

  • new F 가 호출될 때만 사용된다.
  • new F 를 호출해 새롭게 만든 객체의 [[Prototype]] 을 할당해준다.
  • 새로운 객체가 만들어 진 후에 F.prototype 프로퍼티가 바뀌면 (F.prototype = <another object>)
    • new F 로 만들어지는 새로운 객체는 another object[[Prototype]] 으로 갖게 된다.
    • 기존 객체의 [[Prototype]] 은 그대로 유지 된다.

함수의 prototype 프로퍼티와 constructor 프로퍼티#

  • 모든 함수는 prototype 프로퍼티를 갖는다.
  • 기본 prototype 프로퍼티가 가리키는 객체
    • contructor 프로퍼티 하나만 있는 객체
    • contructor 프로퍼티는 함수 자신을 가리킨다.
function Rabbit() {}
/* 기본 prototype
Rabbit.prototype = { constructor: Rabbit };
*/

image

Rabbit 을 구현한 객체 모두에서 [[Prototype]] 을 거쳐 contructor 프로퍼티를 사용할 수 있다.

function Rabbit() {}
// 기본 prototype:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // {constructor: Rabbit}을 상속받음
alert(rabbit.constructor == Rabbit); // true (프로토타입을 거쳐 접근함)

image

contructor 프로퍼티의 사용#

객체를 만들 때 어떤 생성자가 사용되었는지 알 수 없는 경우 (서드 파티 라이브러리 객체인 경우) 사용한다.

function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("White Rabbit");
let rabbit2 = new rabbit.constructor("Black Rabbit");
Last updated on